package Models;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

/**
 * Esta clase representa una abstraccion de las peticiones http realizadas al
 * servidor
 *
 * @author: Guillermo Martinez
 * @version: 15/10/2014/
 */
public class PeticionService {

    /**
     * Peticion http post para iniciar sesion en siase
     * http://deimos.dgi.uanl.mx/cgi-bin/wspd_cgi.sh/eselcarrera.htm retorna un
     * string con la pagina html con parametros necesarios para acceder a cada
     * una de las secciones de la plataforma
     */
    public static String iniciarSesion(String usuario, String password) {

        //Creamos una instancia httpclient
        DefaultHttpClient httpclient = new DefaultHttpClient();

        //Aqui almacenaremos el html devuelto por la peticion
        String line = "";

        try {

            //Realizamos la peticion http get a la url especificada para obtener el formulario al cual ingresaremos las credenciales
            HttpGet httpget = new HttpGet("http://deimos.dgi.uanl.mx/cgi-bin/wspd_cgi.sh/login.htm");

            //Creamos una instancia http response que recibira la respuesta devuelta por http get
            HttpResponse response = httpclient.execute(httpget);

            HttpEntity entity = response.getEntity();

            System.out.println("Login form get: " + response.getStatusLine());
            EntityUtils.consume(entity);

            // Mostramos las cookies
            System.out.println("Inicializando las cookies:");

            //Obtenemos las cookies de httpclient y la almacenamos en una lista 
            List<Cookie> cookies = httpclient.getCookieStore().getCookies();

            //Validamos si hay cookies en la lista
            if (cookies.isEmpty()) {
                System.out.println("No hay cookies");
            } else {
                // imprimimos en pantalla
                for (int i = 0; i < cookies.size(); i++) {
                    System.out.println("- " + cookies.get(i).toString());
                }
            }
            //Se realiza la segunda peticion http post al servidor para enviar los parametros de inicio de sesion
            String url = "http://deimos.dgi.uanl.mx/cgi-bin/wspd_cgi.sh/eselcarrera.htm";
            List<NameValuePair> parametrosPeticion = new ArrayList<NameValuePair>();
            parametrosPeticion.add(new BasicNameValuePair("HTMLTipCve", "01"));
            parametrosPeticion.add(new BasicNameValuePair("HTMLUsuCve", usuario));
            parametrosPeticion.add(new BasicNameValuePair("HTMLPassword", password));
            parametrosPeticion.add(new BasicNameValuePair("HTMLPrograma", ""));
            String html = new HTTPUtil().GetResponseFromHTTPPost(httpclient, url, parametrosPeticion, usuario, password);
            System.out.println(html);
        } catch (Exception e) {
        } finally {
            //Cerramos la el objeto que realiza la peticion
            httpclient.getConnectionManager().shutdown();
        }

        return line;
    }

}
